package org.dxy.trigger.http.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dxy.api.dto.param.CreateProcessParamRequest;
import org.dxy.api.dto.param.UpdateProcessParamRequest;
import org.dxy.api.response.R;
import org.dxy.infrastructure.persistent.db.mybatispuls.po.ProcessParamRequirementPo;

import java.util.List;

/**
 * @description: 工序参数配置应用服务接口
 * @author: dxy
 * @createTime: 2025/1/21
 */
public interface ProcessParamApplicationService {

    /**
     * 创建工序参数配置
     * @param dto 工序参数配置创建请求DTO
     * @return 操作结果
     */
    R<Long> create(CreateProcessParamRequest dto);

    /**
     * 更新工序参数配置
     * @param dto 工序参数配置更新请求DTO
     * @return 操作结果
     */
    R<Void> update(UpdateProcessParamRequest dto);

    /**
     * 分页查询工序参数配置列表
     * @param page 分页参数
     * @param query 查询条件
     * @return 分页的工序参数配置列表
     */
    R<Page<ProcessParamRequirementPo>> list(Page<ProcessParamRequirementPo> page, ProcessParamRequirementPo query);

    /**
     * 查询工序参数配置详情
     * @param id 工序参数配置ID
     * @return 工序参数配置详情
     */
    R<ProcessParamRequirementPo> getById(Long id);

    /**
     * 根据工序ID查询参数配置列表
     * @param processId 工序ID
     * @return 工序参数配置列表
     */
    R<List<ProcessParamRequirementPo>> getByProcessId(Long processId);

    /**
     * 根据参数定义ID查询工序参数配置列表
     * @param paramDefinitionId 参数定义ID
     * @return 工序参数配置列表
     */
    R<List<ProcessParamRequirementPo>> getByParamDefinitionId(Long paramDefinitionId);

    /**
     * 查询必填参数配置
     * @param processId 工序ID（可选）
     * @return 必填参数配置列表
     */
    R<List<ProcessParamRequirementPo>> getRequiredParams(Long processId);

    /**
     * 批量创建工序参数配置
     * @param dtoList 工序参数配置创建请求DTO列表
     * @return 操作结果
     */
    R<List<Long>> batchCreate(List<CreateProcessParamRequest> dtoList);

    /**
     * 删除工序参数配置
     * @param id 工序参数配置ID
     * @return 操作结果
     */
    R<Void> delete(Long id);

    /**
     * 批量删除工序参数配置
     * @param ids 工序参数配置ID列表
     * @return 操作结果
     */
    R<Void> batchDelete(List<Long> ids);

    /**
     * 根据工序ID删除所有参数配置
     * @param processId 工序ID
     * @return 操作结果
     */
    R<Void> deleteByProcessId(Long processId);
}